home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 19 / CU Amiga Magazine's Super CD-ROM 19 (1998)(EMAP Images)(GB)[!][issue 1998-02].iso / CUCD / Readers / ExtremeAmos / Text / R_Cross_VU.ASC < prev    next >
Text File  |  1995-12-30  |  11KB  |  307 lines

  1. ü
  2.                              Programming Routine
  3.                              ~~~~~~~~~~~~~~~~~~~
  4. ý
  5.                     Cross-style VUMeter Graphic Equalizer
  6.     
  7. þ
  8.                      Written by Andrew "Mushroom" Kellett
  9.     
  10. ù
  11.         This is a routine that I developed a few weeks ago, whilst working
  12.     on a demo to show the powers of AMOS, featuring lot's of VU power,
  13.     vectors, bullballs, and much much more, all done using simple AMOS
  14.     commands.
  15.     
  16.         I created this procedure, to emulate all kinds of different kinds
  17.     of shapes, including a nice circle effect, similar to the one in the
  18.     "Jesus on E's" demo, which inspired me to try and copy the effect. I
  19.     am including the routine, as a few people have asked how it was
  20.     actually done.
  21.     
  22.         The program requires one picture bank, which is the file called
  23.     VU_CROSS, which is stored in the DATA drawer of the first disk. You
  24.     may need to decrunch the file, depending on how much space I have
  25. ÿ
  26. ù
  27.     available, and if I had to crunch it down. If you don't have a copy of
  28.     Crunchmania, then you can use the RTDD program in the C: drawer of
  29.     disk one, load in the bank to AMOS, and then re-save it as an
  30.     uncrunched file. RTDD is a run-time decruncher, and requires the
  31.     CRM.LIBRARY file to run, which is in the LIBS: drawer of disk 1.
  32.     
  33.         The FULL AMOS program, is situated on disk 2. The program is
  34.     freely useable, as long as I get a mention in the credits somewhere if
  35.     you copy the routine. Now, onto the description on how the listing
  36.     actually operates.
  37.     
  38. û
  39.         Dim P(31)
  40.         Global SETTING,P()
  41.     
  42.         F$=Fsel$("","","Select a Pro/Sound/Noise","Tracker module to use")
  43.     
  44.         Hide On
  45.         If F$="" : Edit : End If
  46.     
  47.     
  48. ÿ
  49. û
  50.         If Exist(F$)
  51.            Track Load F$,3 : Track Play 3
  52.            Track Loop On : Led Off
  53.         Else
  54.            Edit
  55.         End If
  56.     
  57.         Proc PREPARE
  58.     
  59. ù
  60.     Sets up the initialization of the program. The screen used requires
  61.     one array, which holds all the colours of the screen. SETTING is a
  62.     number which can be assigned, and the routine quits out after that
  63.     number of updates. If there is no information to be displayed
  64.     on-screen, then the setting reaches it's target faster.
  65.     
  66.     The program then asks for you to give it a music module, in the form
  67.     of either a Sound/Pro/Noisetracker module. This is then started to
  68.     play, to make the VUMeter command start registering. Proc PREPARE is
  69.     then called to initiate the screen.
  70.     
  71. ÿ
  72. û
  73.         Do
  74.            Proc _VU5[200]
  75.         Loop
  76.     
  77. ù
  78.     This part of the program is the bit which does all the main work. It
  79.     will access the routine for 200 loops, before quitting out. I have set
  80.     the delay to a short one, as you will have seen in the demo, with the
  81.     changing colours. See the _VU5 routine for more details.
  82.     
  83. û
  84.         Procedure PREPARE
  85.            Unpack 8 To 0 : Screen Hide 0 : For N=0 To 31 : Colour N,0 :
  86.            Next N
  87.         End Proc
  88.     
  89. ù
  90.     The program automatically presumes that bank 8 contains the picture of
  91.     the cross. All the colours are then cleared from the screen, to begin
  92.     the routine to draw the picture back in a special way. If you want to
  93.     save on a bit of memory, then an ERASE 8 can be used after the UNPACK
  94.     command.
  95.     
  96. ÿ
  97. û
  98.         Procedure _VU5[SETTING]
  99.            TLP=0
  100.            G=Rnd(3)
  101.     
  102.            If G=0
  103.               DAT2:
  104.               Data $0,$FFF,$EEE,$DDD,$CCC,$BBB,$AAA,$999,$FFF,$EEE,$DDD,$CCC
  105.               Data $BBB,$AAA,$999,$999,$888,$666,$555,$444,$222,$333,$999
  106.               Data $888,$777,$666,$555,$444,$333,$58C,$BB0,$99F
  107.               Restore DAT2 : For OO=0 To 31 : Read P(OO) : Next OO
  108.            End If
  109.     
  110.            If G=1
  111.               DAT3:
  112.               Data $0,$49,$3A,$3B,$2C,$1D,$1E,$F,$FFF,$EEE,$DDD,$CCC,$BBB
  113.               Data $AAA,$999,$999,$888,$666,$555,$444,$222,$333,$900,$A00
  114.               Data $B00,$C00,$D00,$E00,$F00,$58C,$BB0,$99F
  115.               Restore DAT3 : For OO=0 To 31 : Read P(OO) : Next OO
  116.            End If
  117.     
  118. ÿ
  119. û
  120.            If G=2
  121.               DAT4:
  122.               Data $0,$999,$888,$777,$666,$555,$444,$333,$999,$888,$777,$666
  123.               Data $555,$444,$333,$999,$888,$777,$666,$555,$444,$333,$999
  124.               Data $888,$777,$666,$555,$444,$333,$58C,$BB0,$99F
  125.               Restore DAT4 : For OO=0 To 31 : Read P(OO) : Next OO
  126.            End If
  127.     
  128.            If G=3
  129.               DAT5:
  130.               Data $0,$900,$A00,$B00,$C00,$D00,$E00,$F00,$90,$A0,$B0,$C0
  131.               Data $D0,$E0,$F0,$990,$AA0,$BB0,$CC0,$DD0,$EE0,$FF0,$49,$3A
  132.               Data $3B,$2C,$1D,$1E,$F,$58C,$BB0,$99F
  133.               Restore DAT5 : For OO=0 To 31 : Read P(OO) : Next OO
  134.            End If
  135.     
  136.            For N=0 To 31 : Colour N,0 : Next N
  137.            Wait Vbl : Screen To Front 0 : Screen Show 0
  138.     
  139. ù
  140.     When the routine is first called, the program decides on a random
  141. ÿ
  142. ù
  143.     colour in which to use. If you saw the routine running before you read
  144.     this file, you would notice the equalizer "Appear" to be changing
  145.     colours. This is all done randomly, and the computer decides on a
  146.     number from 0-3 and changes the palette array accordingly. The screen
  147.     is then cleared of all colours, and brings it into view in case any
  148.     other routine has caused the screen to be hid.
  149.     
  150. û
  151.            Do
  152.               Gosub ACQUIRE
  153.               If TLP=>SETTING*2 : Exit : End If
  154.               Inc TLP
  155.            Loop
  156.     
  157. ù
  158.     This is the main loop inside the routine. It is constantly calling the
  159.     routine ACQUIRE, which draws the current VU settings on the screen.
  160.     The variable TLP is increased, until it is doubled the value assigned,
  161.     then the program exits the loop, and calls a POP PROC, which exits it
  162.     out of the procedure.
  163.     
  164. û
  165.            Pop Proc
  166. ÿ
  167.     
  168. û
  169.            ACQUIRE:
  170.            A=(Vumeter(0))+1 : CH1=0 : B=(Vumeter(1))+1 : CH2=0
  171.            C=(Vumeter(2))+1 : CH3=0 : D=(Vumeter(3))+1 : CH4=0
  172.     
  173. ù
  174.     A, B, C, and D are the numbers recieved from the VUmeter channels at
  175.     the time of reading, and will range from the value of 0 - 63.
  176.     
  177. û
  178.            If A>A1 Then A1=A
  179.            If A>A1 Then CH1=1
  180.            If B>B1 Then B1=B
  181.            If B>B1 Then CH2=1
  182.            If C>C1 Then C1=C
  183.            If C>C1 Then CH3=1
  184.            If D>D1 Then D1=D
  185.            If D>D1 Then CH4=1
  186.     
  187. ù
  188.     If the values read are higher than the ones which are in memory, then
  189.     they are loaded with the appropriate figures. If the number is lower,
  190.     then nothing is changed.
  191. ÿ
  192.     
  193. û
  194.            If CH1=0 Then A1=A1-1
  195.            If CH2=0 Then B1=B1-1
  196.            If CH3=0 Then C1=C1-1
  197.            If CH4=0 Then D1=D1-1
  198.     
  199. ù
  200.     If no numbers were added to any of the channels in memory, then the
  201.     CH1 - 4 will be 0, and this deducts 1 from the memory value on the
  202.     channels which did not have any increases to them. This gives the
  203.     on-screen effect of the equalizer dropping down slowly if there is no
  204.     action there.
  205.     
  206. û
  207.            If A1<0 Then A1=0
  208.            If B1<0 Then B1=0
  209.            If C1<0 Then C1=0
  210.            If D1<0 Then D1=0
  211.     
  212. ù
  213.     If any of the channels drops below 0 for some reason, then this piece
  214.     of the program will take it back to 0 to make the program work
  215.     correctly, especially if it is looking for a value of 0.
  216. ÿ
  217. û
  218.     
  219.            P=A1/10 : If A1=>62 : P=7 : End If : Gosub _DRAW1
  220.            P=B1/10 : If B1=>62 : P=7 : End If : Gosub _DRAW2
  221.            P=C1/10 : If C1=>62 : P=7 : End If : Gosub _DRAW3
  222.            P=D1/10 : If D1=>62 : P=7 : End If : Gosub _DRAW4
  223.            Return
  224.     
  225. ù
  226.     Now, the program calls a draw routine for each of the four channels.
  227.     The value of P is assigned a variable of 0 - 5, or is assigned to 7 if
  228.     the VUmeter reading is at it's maximum. Looking at the draw routines
  229.     below, you will see why I have had to use 1-7. Although you will set
  230.     the value to 7, you may not actually see the effect on-screen, as the
  231.     updates are made so quickly, especially when it has been compiled.
  232.     
  233. û
  234.            _DRAW1:
  235.            If P=0 : Colour 1,0 : End If
  236.            If P>0
  237.               For N=1 To P : Colour N,P(N) : Next N
  238.               If P<7 : For N=P+1 To 7 : Colour N,0 : Next N : End If
  239.            End If
  240. ÿ
  241. û
  242.            Return
  243.     
  244.            _DRAW2:
  245.            If P=0 : Colour 8,0 : End If
  246.            If P>0
  247.               For N=1 To P : Colour N+7,P(N+7) : Next N
  248.               If P<7 : For N=7+(P+1) To 13 : Colour N,0 : Next N : End If
  249.            End If
  250.            Return
  251.     
  252.            _DRAW3:
  253.            If P=0 : Colour 15,0 : End If
  254.            If P>0
  255.               For N=1 To P : Colour N+14,P(N+14) : Next N
  256.               If P<7 : For N=14+(P+1) To 20 : Colour N,0 : Next N : End If
  257.            End If
  258.            Return
  259.     
  260.            _DRAW4:
  261.            If P=0 : Colour 22,0 : End If
  262. ÿ
  263. û
  264.            If P>0
  265.               For N=1 To P : Colour N+21,P(N+21) : Next N
  266.               If P<7 : For N=21+(P+1) To 27 : Colour N,0 : Next N : End If
  267.            End If
  268.            Return
  269.         End Proc
  270.     
  271. ù
  272.     These are the 4 draw routines, seperated into individual routines to
  273.     make it easier for you to follow. The program looks at the number in
  274.     P, and assigns the first P of 6 colours with the correct value, for
  275.     the appropriate character. If the number in P is less than 6, then the
  276.     rest are filled with 0, to clear any unwanted debris off the screen.
  277.     Each bar has 7 colours to use, as I decided to use a 32 colour screen.
  278.     Any bigger, and the effects would have started getting slower, however
  279.     a HAM screen compiled, would not be a bad idea. Maybe I will get to
  280.     that.
  281.     
  282.     
  283.     
  284.     
  285. ÿ
  286. þ
  287.         Well, there you have it. A fully-functional VU cross demo. If you
  288.     are having problems with this routine, then why not drop me a line at
  289.     the Mushroom PD address, or give me a call. The address is scattered
  290.     around various different parts of the magazine.
  291.     
  292. ú
  293.         If you have any excellent routines which you would like to
  294.     include, then why not send me the AMOS listing, and a documented
  295.     procedure breakdown, like this, and I will include it. Remember, you
  296.     will receive a FREE copy of the first issue your article appears in.
  297.     
  298. ý
  299.         All mail sent to me will be replied to as soon as possible,
  300.     depending on how busy I am. If you are sending disks, then why not
  301.     fill them with your AMOS programs and PD so I can include them in the
  302.     library. The address is scattered around various articles.
  303.     
  304. ÷
  305. EOF
  306.  
  307.